#include<stdio.h>
#include<signal.h>
#include<unistd.h>
#include<stdlib.h>
void handler(int signo)
{
	printf("get a signo : %d\n",signo);
}
void show_pending(sigset_t* pending)
{
	for(int i = 1; i <= 31; ++i)
	{
		if(sigismember(pending,i))
			printf("1");
		else
			printf("0");
	}
	printf("\n");
}
int main()
{
	signal(2,handler);//信号捕捉2号信号
	sigset_t in,out;//定义信号集对象
	sigemptyset(&in);
	sigemptyset(&out);
	sigaddset(&in,2);//把信号2放入信号集中
	sigprocmask(SIG_SETMASK,&in,&out);//out相当于备份了初始的信号集
	int count = 0;

	sigset_t pending;
	while(1)
	{
		sigpending(&pending);
		show_pending(&pending);
		sleep(1);
		if(count == 5)
		{
			sigprocmask(SIG_SETMASK,&out,&in);//此时把初始的信号集用来设置当前的阻塞信号集
								//in则备份了sigprocmask修改之前信号集
			printf("my: ");
			show_pending(&in);
			printf("recover default: ");
			show_pending(&out);
			sleep(1);
			exit(0);
		}
		count++;
	}
	return 0;
}
